﻿using sipfe.model.sqlExecutor;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using sipfe.bean;
using System.Web;



namespace sipfe.service.menu
{
    public class FormaMenuService
    {

        public StringBuilder getMenuByPerfil(string idPerfil)
        {
            string cadena = string.Empty;

            String[] parametros         =   new String[] { idPerfil };
            String[] nombreParametros   =   new String[] { "idPerfil" };

            IList<dynamic> lista = SqlExecutorSP.executeStore("paSIPOpcionesPerfil", parametros, nombreParametros);
            List<OpcionBean> listaBean = new List<OpcionBean>();
            return generaMenu(lista);
        }

        private StringBuilder generaMenu(IList<dynamic> lista)
    {
        List<OpcionBean> opciones0 = getListaNivel(lista, 0);
        List<OpcionBean> opciones1 = getListaNivel(lista, 1);
        List<OpcionBean> opciones2 = getListaNivel(lista, 2);
       

        int p = 0, q = 0, r = 0;
        StringBuilder cadena = new StringBuilder();
        cadena.Append("var MENU_ITEMS = [");

        foreach(OpcionBean opcion0 in opciones0){//nivel 0
            cadena.Append(" ['").Append(opcion0.Descripcion).Append("','").Append(opcion0.Url).Append("', null, ");
            r++;
            foreach (OpcionBean opcion1 in opciones1){//nivel 1
            
                if(opcion1.OpcionPadre.Equals(opcion0.IdOpcion)) {
                        cadena.Append(" ['").Append(opcion1.Descripcion).Append("','").Append(opcion1.Url).Append("', null, ");
                        p++;
                        foreach (OpcionBean opcion2 in opciones2) {//nivel 2
                            q++;
                            if(opcion2.OpcionPadre.Equals(opcion1.IdOpcion)) {
                              cadena.Append(" ['").Append(opcion2.Descripcion).Append("','").Append(opcion2.Url).Append("'], ");
                              if (opciones2.Count >= q)
                                  cadena.Append(" ,");
                            }
                        }//fin nivel 2
                        cadena.Append("]");
                        if (opciones1.Count >= p) cadena.Append(" ,");
                    }
            }//fin nivel 1
            cadena.Append("]");
            if (opciones0.Count >= r) cadena.Append(" ,");    
        }//fin nivel 0
        cadena.Append("];");
        return cadena;
    }

        private List<OpcionBean> getListaNivel(IList<dynamic> lista, decimal nivel)
        {
            OpcionBean opcionBean = null;
            List<OpcionBean> listaBean = new List<OpcionBean>();
            decimal nivelAux = 0;

            foreach (dynamic item in lista)
            {
                nivelAux = item.nivel;
                if (nivelAux==nivel)
                {
                    opcionBean = new OpcionBean();
                    if ( string.IsNullOrEmpty(Convert.ToString(item.url)))
                    {
                        opcionBean.Url = "";
                    }
                    else
                    {
                        opcionBean.Url = (item.url).ToString();
                    }

                    if (string.IsNullOrEmpty(Convert.ToString(item.opcion_padre)))           
                    {
                        opcionBean.OpcionPadre = "";
                    }
                    else
                    {
                        opcionBean.OpcionPadre = (item.opcion_padre).ToString();
                    }
                    opcionBean.Descripcion = item.descripcion;
                    opcionBean.IdOpcion = item.id_opcion.ToString();
                   listaBean.Add(opcionBean);
                }
            }
            return listaBean;
        }
    }
}
